/**
 * Clase encargada de calcular y mostrar la clasificacion.
 * @author Asier Esteban
 *
 */
package packLigaDeFutbol;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;

public class GestorClasificacion {
	
	private ArrayList<EquipoPuntos> laClasificacion;
	
	public GestorClasificacion() {
		this.laClasificacion = new ArrayList<EquipoPuntos>();
	}
	
	public ArrayList<EquipoPuntos> calcularClasificacion() {
		int idJornada = -1;
		int idEquipo = -1;
		int puntos = 0;
		ArrayList<Integer> aEq = new ArrayList<Integer>();
		ArrayList<Integer> aJo = new ArrayList<Integer>();
		String strEquipos = "SELECT idEquipo from temporadaequipo te,temporada t WHERE te.idTemp = t.idTemporada AND t.idTemporada = " + GestorTemporadas.get().temporadaActual() + ";";
		String strJornadas = "SELECT idJornada from jornada j WHERE j.idtemporada = " + GestorTemporadas.get().temporadaActual() + ";";
		ResultSet rsEquipos,rsJornadas, rsPartido = null;
		try {
			rsEquipos = Principal.BBDD.consulta(strEquipos);
			while(rsEquipos.next()) {
				idEquipo = rsEquipos.getInt("idEquipo");
				aEq.add(idEquipo);
			}
			rsJornadas = Principal.BBDD.consulta(strJornadas);
			while(rsJornadas.next()){
				idJornada = rsJornadas.getInt("idJornada");	
				aJo.add(idJornada);
			}
		}catch (SQLException e) {
				e.printStackTrace();
		}
		
		Iterator<Integer> itE = aEq.iterator();
		Iterator<Integer> itJ = aJo.iterator();
		
		while(itE.hasNext()) {
			int equipo = itE.next();
			while(itJ.hasNext()) {
				int jornada = itJ.next();
				try{
					rsPartido = Principal.BBDD.consulta("SELECT COUNT(*) as cuantos from partido p WHERE p.idjornada = " + jornada + " AND ((p.resultado = 1 AND p.idLocal = " + equipo + ") OR (p.resultado = 2 AND p.idVisitante = " + equipo + "));");
					if(rsPartido.next()) {
						puntos = puntos + (3*rsPartido.getInt("cuantos"));
					}	
					rsPartido = Principal.BBDD.consulta("SELECT COUNT(*) as cuantos from partido p WHERE p.idjornada = " + jornada + " AND ((p.resultado = 0 AND p.idLocal = " + equipo + ") OR (p.resultado = 0 AND p.idVisitante = " + equipo + "));");
					if(rsPartido.next()) {
						puntos = puntos + rsPartido.getInt("cuantos");
					}
					this.laClasificacion.add(new EquipoPuntos(idEquipo,puntos));
				}catch(SQLException e) {
					e.printStackTrace();
				}
			}
		}
		//Falta ordenar
		return laClasificacion;
	}
		

}
